<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
// 	* 声明一定要赋初始值:一旦声明常量，就必须立即初始化，不能留到以后赋值
// 	>  `const` 声明一个只读变量，声明之后不允许改变。意味着，一旦声明必须初始化，否则会报错。
{
	// let a = 1;
	// let b;
	// a = "zhangsan"
    //
	// const c =3;// 必须要有初始值
    // c = "lisi"

}
// 	* 值不允许修改 作业  广告主 1w
//  const 其实保证的不是变量的值不变，而是保证变量指向的内存地址不允许改动。
//  所以 使用 const 定义的对象或者数组，其实是可变的。
{
	// 基本数据类型: 数字 字符串  布尔 null undefined
    // 引用类型：对象 数组 函数
    // 在赋值，在比较的时候用的都是引用地址
    // 声明了一个名字为obj的变量，类型是一个对象，对象中有属性a,值为1
    // let obj = {
	// 	a:1
    // }
	// let obj2 = {
	// 	a:1
    // }
	// console.log(obj === obj2);// false  鹿鼎记（韦小宝）

    // let obj = {
	// 	a:1
    // }
	// let obj2 = obj;
	// console.log(obj === obj2);// true
    // obj2.a = 100;
	// console.log(obj);// a---->100


    // const obj = {
	// 	a:1
    // }
	// obj.a = 100;
	// console.log(obj);
}
// 	- `const`只在声明所在的块级作用域内有效。（与let相同）
// {
// 	const a = 1;
// }
// console.log(a)
//  - `const`命令声明的常量也是不会提升（与let相同）
// {
// 	console.log(a);
// 	const a = 1;
// 	console.log(a);
// }
// - `const`不可重复声明（与let相同）
// {
// 	const a = 1;
// 	const a = 2;
// }
//  - 不再是顶层全局对象的属性（与let相同）
// {
// 	let a = 1;
// 	console.log(window.a);
// }
// 	>  let命令、`const`命令、class命令声明的全局变量，
// 	    不属于顶层对象的属性。也就是说，从 `ES6 `开始，全局变量将逐步与顶层对象的属性脱钩。
// 	* <font color="red">const使用的两点建议：</font>
// 	> <font color="red">1、被多次使用且不允许更改的数据建议通过const定义;</font>
// 	> <font color="red">2、项目全局常量建议大写，单词之间用-分隔；</font>
// 	> 3、如果不清楚要使用let还是const,那么就用const。如果后面发生值的改变，那么再将const改成let.
// 	> 4、以后不允许使用var
{
	// var
}
</script>
</html>